//package com.skyyan.netty.jjf.protocol;
//
///**
// * C.9 心跳报文 (上行/下行)
// * AFN = 0x9B
// *
// * 报文格式：
// * - 控制域：0x01 (上行) 或 0x00 (下行)
// * - 地址域：9字节
// * - AFN：0x9B
// * - 用户数据：无
// * @author skyyan
// */
//public class HeartbeatMessage extends Message {
//
//    /**
//     * 构造一个心跳报文
//     * @param address 地址域 (9字节)
//     * @param isUplink 是否为上行报文
//     */
//    public HeartbeatMessage(byte[] address, boolean isUplink) {
//        super(isUplink ? FrameConstants.CONTROL_UPLINK : FrameConstants.CONTROL_DOWNLINK,
//                address, FrameConstants.AFN_HEARTBEAT, new byte[0]);
//    }
//
//    /**
//     * 供解码器使用的构造函数
//     * @param control 控制域
//     * @param address 地址域
//     * @param userData 用户数据
//     */
//    public HeartbeatMessage(byte control, byte[] address, byte[] userData) {
//        super(control, address, FrameConstants.AFN_HEARTBEAT, userData);
//    }
//
//    /**
//     * 判断是否为上行心跳
//     * @return true表示上行，false表示下行
//     */
//    public boolean isUplink() {
//        return getControl() == FrameConstants.CONTROL_UPLINK;
//    }
//
//    /**
//     * 创建上行心跳报文
//     * @param address 地址域
//     * @return 上行心跳报文
//     */
//    public static HeartbeatMessage createUplink(byte[] address) {
//        return new HeartbeatMessage(address, true);
//    }
//
//    /**
//     * 创建下行心跳报文
//     * @param address 地址域
//     * @return 下行心跳报文
//     */
//    public static HeartbeatMessage createDownlink(byte[] address) {
//        return new HeartbeatMessage(address, false);
//    }
//
//    @Override
//    public String toString() {
//        return super.toString() + ", direction=" + (isUplink() ? "上行" : "下行");
//    }
//}
//
